﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data;
using produccion.clases;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FRMManUni.xaml
    /// </summary>
    public partial class FRMManUni : Window
    {
        CLSENCUNI EncUni = new CLSENCUNI();
        CLSDETUNI DetUni = new CLSDETUNI();
        DataTable dt = new DataTable();
        DataTable dtDet = new DataTable();

        public FRMManUni()
        {
            InitializeComponent();
        }

        private void btnSalir_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            dt = EncUni.ConsultarTodas();
            dgEncUni.ItemsSource = dt.DefaultView;

            PrivV_AjustarGrdUnidadesDeMedida();

            txtCodigo.Focus();
        }
        private void PrivV_AjustarGrdUnidadesDeMedida()
        {
            dgEncUni.Columns[0].Width = 100;
            dgEncUni.Columns[1].Width = 750;
        }
        private void dgEncUni_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            try
            {
                if (dgEncUni.SelectedIndex > -1)
                {
                    txtCodigo.Text = ((DataRowView)dgEncUni.Items[dgEncUni.SelectedIndex]).Row["codigo"].ToString();
                    txtNombre.Text = ((DataRowView)dgEncUni.Items[dgEncUni.SelectedIndex]).Row["nombre"].ToString();
                    DetUni.CODUNI1_DUN = txtCodigo.Text;
                    dtDet = DetUni.Consultar();
                    dgDetUni.ItemsSource= dtDet.DefaultView;
                    tbLeyenda.Text = "Cada " + txtNombre.Text + " equivale a:";

                    PrivV_AjustarGrdMedidasEquivalentes();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error al cargar encabezado de unidades con doble click del mouse", MessageBoxButton.OK, MessageBoxImage.Error);
            }

        }
        private void PrivV_AjustarGrdMedidasEquivalentes()
        {
            dgDetUni.Columns[0].Width = 100;
            dgDetUni.Columns[1].Width = 650;
            dgDetUni.Columns[2].Width = 100;
            dgDetUni.Columns[2].CellStyle = newCellStyleAlineadoAlaIzquierda();
        }
        public static Style newCellStyleAlineadoAlaIzquierda()
        {
            System.Windows.Style style = new Style(typeof(DataGridCell));
            style.Setters.Add(new System.Windows.Setter
            {
                Property = Control.HorizontalAlignmentProperty,
                Value = HorizontalAlignment.Right
            });
            return style;
        }

        private void dgDetUni_GotFocus(object sender, RoutedEventArgs e)
        {
            int i = dgDetUni.CurrentCell.Column.DisplayIndex;
            if (i == 2)
            {
                dgDetUni.IsReadOnly = false;
            }
            else
            {
                dgDetUni.IsReadOnly = true;
            }
        }

        private void btnCrear_Click(object sender, RoutedEventArgs e)
        {
            txtNombre.Text = "";
            dgDetUni.ItemsSource = null;
            dtDet.Rows.Clear();
            txtCodigo.Text = EncUni.TraerMaximoCod();
        }

        private void btnGrabar_Click(object sender, RoutedEventArgs e)
        {
            if (txtCodigo.Text != "" && txtNombre.Text != "")
            {
                EncUni.CODUNI_EUN = txtCodigo.Text;
                EncUni.NOMUNI_EUN = txtNombre.Text;
                if (!EncUni.ExisteUnidad())
                {
                    EncUni.Insertar();
                    DetUni.CODUNI1_DUN = txtCodigo.Text;
                    DetUni.CODUNI2_DUN = txtCodigo.Text;
                    DetUni.VALOR_DUN = 1;
                    DetUni.Insertar();
                }
                else
                {
                    EncUni.Actualizar();
                }
                for (int i = 0; i < dtDet.Rows.Count; i++)
                {
                    if (!dtDet.Rows[i][2].Equals("0"))
                    {
                        if (txtCodigo.Text != dtDet.Rows[i][0].ToString())
                        {
                            DetUni.CODUNI1_DUN = txtCodigo.Text;
                            DetUni.CODUNI2_DUN = dtDet.Rows[i][0].ToString();
                            DetUni.VALOR_DUN = System.Convert.ToDouble(dtDet.Rows[i][2].ToString());
                            if (DetUni.ExisteDetalle())
                            {
                                DetUni.Actualizar();
                            }
                            else
                            {
                                DetUni.Insertar();
                            }
                        }
                    }
                }
                dgDetUni.ItemsSource = null;
                dgEncUni.ItemsSource = null;
                dt = EncUni.ConsultarTodas();
                dgEncUni.ItemsSource = dt.DefaultView;
                new MDOgeneral.notificar(wPnot, "Los cambios fueron guardados correctamente.", true);
            }
        }

        private void btnEliminar_Click(object sender, RoutedEventArgs e)
        {
            if (txtCodigo.Text == "")
            {
                MessageBox.Show("No hay un código para eliminar!", "Eliminar unidades", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return;
            }

            EncUni.CODUNI_EUN = txtCodigo.Text;
            if (EncUni.ExisteMaeMat())
            {
                MessageBox.Show("No se puede eliminar la unidad de medida, ya existe en el maestro de materiales!", "Eliminar unidades", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            if (MessageBox.Show("Está seguro de eliminar la unidad de medida?", "Eliminar unidades", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
            {
                DetUni.CODUNI1_DUN = txtCodigo.Text;
                DetUni.Eliminar();
                EncUni.CODUNI_EUN = txtCodigo.Text;
                EncUni.Eliminar();
                txtNombre.Text = "";
                dgDetUni.ItemsSource = null;
                dtDet.Rows.Clear();
                dt = EncUni.ConsultarTodas();
                dgEncUni.ItemsSource = dt.DefaultView;
            }
        }

        private void dgEncUni_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void dgEncUni_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            DataGridBoundColumn c = (DataGridBoundColumn)e.Column;
            c.Binding = new Binding(e.PropertyName) { UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged };

            if (e.Column.Header.ToString() == "CODIGO")
            {
                c.Width = 100;
                e.Column.Header = "Código";
            }

            if (e.Column.Header.ToString() == "NOMBRE")
            {
                c.Width = 750;
                e.Column.Header = "Nombre";
            }
        }

        private void dgDetUni_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            DataGridBoundColumn c = (DataGridBoundColumn)e.Column;
            c.Binding = new Binding(e.PropertyName) { UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged };

            if (e.Column.Header.ToString() == "CODUNI_EUN")
            {
                c.Width = 100;
                e.Column.Header = "Código Unidad";
            }

            if (e.Column.Header.ToString() == "NOMUNI_EUN")
            {
                c.Width = 750;
                e.Column.Header = "Nombre Unidad";
            }

            if (e.Column.Header.ToString() == "VALOR_DUN")
            {
                c.Width = 750;
                e.Column.Header = "Valor Unidad";
            }
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }
    }
}
